home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib11.dsk
/
APPLE RECIPE BOX.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
20KB
|
446 lines
1 REM **********************
2 REM * THE RECIPE BOX *
3 REM * BY JAN COSTENBADER *
4 REM * COPYRIGHT (C) 1982 *
5 REM * BY MICRO-SPARC INC *
6 REM * LINCOLN, MA. 01773 *
7 REM **********************
10 CV$ = "A": REM 10.26.84
20 GOTO 9000
30 PRINT : PRINT CL$: PRINT D$;"PR#0": POKE 34,0: HOME : PRINT TAB( 15);"RECIPE BOX": FOR X = 1 TO 40: PRINT "=";: NEXT : PRINT :PR = 0
40 POKE 32,4: PRINT : PRINT "1=ENTER A NEW RECIPE": PRINT "2=CHANGE A RECIPE ": PRINT "3=PRINT INDEX OF RECIPES"
50 PRINT "4=PRINT A RECIPE": PRINT "5=EXIT SYSTEM"
60 POKE 32,0: VTAB 16:PM$ = "FUNCTION CHOICE: ":UL = 5: GOSUB 300
70 ON CH GOTO 1000,2000,3000,4000,5000
75 ND = 0:CK = 1
80 CK$ = MID$ (I$,CK,1): IF CK$ <"0" OR CK$ >"9" THEN 90
85 CK = CK +1:ND = ND +1: GOTO 80
90 IF ND >3 THEN CALL BL: PRINT "IT LOOKS AS IF YOU'RE FEEDING AN ARMY": PRINT "USE A QUANTITY LESS THAN 1000": PRINT
95 RETURN
100 HOME : VTAB VT: HTAB 1:CL = 1:NW% = 1:LS(1) = 1
102 GET J$(CL)
104 IF J$(CL) = CHR$(8) AND NW% = 1 AND CL = 1 THEN 102
106 IF J$(CL) < > CHR$(8) THEN 114
108 IF CL >1 THEN PRINT CHR$(8);:CL = CL -1: GOTO 102
110 IF NW% >1 THEN NW% = NW% -1:VT = VT -1:CL = LS(NW%): VTAB VT: HTAB CL
112 GOTO 102
114 IF J$(CL) = CHR$(13) THEN LS(NW%) = CL: GOTO 134
116 IF ASC(J$(CL)) <32 THEN 102
118 PRINT J$(CL);: IF J$(CL) = CHR$(32) THEN LS(NW%) = CL
120 CL = CL +1: IF CL <40 THEN 102
122 HTAB LS(NW%): CALL -868:VT = VT +1: VTAB VT: HTAB 1
124 IF NW% = 16 THEN 134
126 FOR X = LS(NW%) +1 TO 40: PRINT J$(X);: NEXT
128 CL = X -LS(NW%) -1:NW% = NW% +1:LS(NW%) = 1
130 IF NW% = 16 THEN CALL BL: INVERSE : FLASH : HTAB 10: PRINT "LAST LINE";: NORMAL : HTAB 1
132 GOTO 102
134 PRINT : PRINT : HTAB 5: PRINT "ONE MOMENT PLEASE"
136 LI = VT -NW% -1: FOR X = 1 TO NW%:WD$(X) = "": FOR X1 = 1 TO LS(X)
138 J = PEEK(L%(LI +X) +X1 -1):J$ = CHR$(J -128)
140 WD$(X) = WD$(X) +J$: NEXT : NEXT
142 RETURN
150 I = 0: CALL BL
152 REM : STANDARD DATA ENTRY
154 IF I <0 THEN I = 0
156 IF NC <6 GOTO 160
158 IF I >NC -5 THEN CALL BL
160 GET J$(I)
162 IF J$(I) = CHR$(27) THEN POP : GOTO 30
164 IF J$(I) = CHR$(13) THEN I = I -1: GOTO 178
166 IF J$(I) = CHR$(21) THEN 160
168 IF J$(I) = CHR$(8) AND I = 0 THEN PRINT "";: GOTO 154
170 IF J$(I) = CHR$(8) THEN PRINT J$(I);:I = I -1: GOTO 154
172 IF ASC(J$(I)) <32 THEN GOTO 160
174 IF NC = I THEN PRINT "";: GOTO 160
176 PRINT J$(I);:I = I +1: GOTO 154
178 PRINT : PRINT :I$ = "": FOR J = 0 TO I:I$ = I$ +J$(J): NEXT : RETURN
200 POKE 34,0: HOME :TB = 20 *(PR +1) - INT( LEN(TL$)/2): IF TB >0 THEN PRINT TAB( TB);
205 PRINT TL$
210 FOR X = 1 TO 40 *(PR +1): PRINT "=";: NEXT : PRINT : IF PR = 0 THEN POKE 34,3
215 RETURN
225 POKE 34,0: HOME :TB = 20 *(PR +1) - INT( LEN(TL$)/2): IF TB >0 THEN PRINT TAB( TB);
230 PRINT TL$
235 TB = 20 *(PR +1) - INT( LEN(T1$)/2): IF TB >0 THEN PRINT TAB( TB);
240 PRINT T1$
245 FOR X = 1 TO 40 *(PR +1): PRINT "=";: NEXT : PRINT : IF PR = 0 THEN POKE 34,4
250 RETURN
300 PRINT PM$;
305 GET CH$: IF CH$ = CHR$(27) THEN POP : GOTO 30
310 CH = VAL(CH$): IF CH <1 OR CH >UL THEN 305
315 PRINT : RETURN
325 PRINT D$;"PR#";PR: PRINT CHR$(29)
330 IF PR >0 THEN PRINT CHR$(9);"80N"
335 RETURN
350 VTAB 22: HTAB 1: PRINT "HIT 'RETURN' TO CONTINUE...";: GOTO 360
355 VTAB 22: PRINT "HIT 'RETURN' FOR MORE...";
360 GET CH$: IF CH$ = CHR$(27) THEN POP : GOTO 30
365 IF ASC(CH$) < >13 THEN 360
370 PRINT : HOME :C = 0: RETURN
375 HOME : PRINT TAB( 13);"OUTPUT CHOICES": PRINT : PRINT " 1=OUTPUT TO SCREEN": PRINT " 2=OUTPUT TO PRINTER"
380 VTAB 15:PM$ = "OUTPUT CHOICE: ":UL = 2: GOSUB 300
385 PR = CH -1: RETURN
410 HOME : VTAB 8: PRINT " THERE ARE NO RECIPES IN THE FILE": GOSUB 350: RETURN
420 HOME : VTAB 8: PRINT "THAT PAGE NUMBER IN NOT IN COMPUTER": GOSUB 350: RETURN
450 PRINT OP$;IX$;L$
460 PRINT WR$;IX$;",R";PN: PRINT TR%(PN): PRINT NR$(PN)
470 PRINT NS%: PRINT PI%: PRINT PP%
480 PRINT CL$: RETURN
500 PRINT OP$;IX$;L$
510 PRINT WR$;IX$;",R0"
515 IF N = 0 THEN N = 1
520 PRINT N: PRINT NX%
530 PRINT CL$;IX$: RETURN
550 PRINT OP$;IX$;L$
560 PRINT RD$;IX$;",R0"
570 INPUT N: INPUT NX%
580 PRINT CL$;IX$
590 RETURN
600 PRINT OP$;RF$;LF$
602 PRINT OP$;RO$;LO$
604 PRINT RD$;RO$;",R0"
606 INPUT RN:NR = NX%:PI% = NX%
608 FOR X = 1 TO NI%:OP = NR
610 IF RN = 0 THEN NR = OP +1: GOTO 624
612 PRINT RD$;RO$;",R";RN
614 INPUT OP:RN = RN -1: IF X = 1 THEN PI% = OP
616 IF X = NI% THEN NR = 0: GOTO 626
618 IF RN = 0 THEN NR = NX%: GOTO 626
620 PRINT RD$;RO$;",R";RN
622 INPUT NR
624 IF X = NI% THEN NR = 0
626 PRINT WR$;RF$;",R";OP
628 PRINT NR
630 PRINT IG$(X): NEXT
632 PRINT WR$;RO$;",R0"
634 PRINT RN
636 PRINT CL$
638 IF OP > = NX% THEN NX% = OP +1
640 RETURN
650 PRINT OP$;RF$;LF$
652 PRINT OP$;RO$;LO$
654 PRINT RD$;RO$;",R0"
656 INPUT RN:NR = NX%:PP% = NX%
658 FOR X = 1 TO NW%:OP = NR
660 IF RN = 0 THEN NR = OP +1: GOTO 674
662 PRINT RD$;RO$;",R";RN
664 INPUT OP:RN = RN -1: IF X = 1 THEN PP% = OP
666 IF X = NW% THEN NR = 0: GOTO 676
668 IF RN = 0 THEN NR = NX%: GOTO 676
670 PRINT RD$;RO$;",R";RN
672 INPUT NR
674 IF X = NW% THEN NR = 0
676 PRINT WR$;RF$;",R";OP
678 PRINT NR
680 PRINT WD$(X): NEXT
682 PRINT WR$;RO$;",R0"
684 PRINT RN
686 PRINT CL$
688 IF OP > = NX% THEN NX% = OP +1
690 RETURN
700 PRINT OP$;IX$;L$
710 PRINT RD$;IX$;",R";PN
720 INPUT TR%(PN): CALL 800:NR$(PN) = MID$ (CV$,1)
730 INPUT NS%: INPUT PI%: INPUT PP%
740 PRINT CL$;IX$: RETURN
800 PRINT OP$;RF$;LF$:NI% = 1:RN = PI%
805 PRINT RD$;RF$;",R";RN
810 RI(NI%) = RN
815 INPUT RN: CALL 800:IG$(NI%) = MID$ (CV$,1)
818 IF RN >10000 THEN A$ = STR$(RN):RN = ASC( RIGHT$(A$,4)) +1
820 IF RN THEN NI% = NI% +1: GOTO 805
825 PRINT CL$;RF$: RETURN
850 PRINT OP$;RF$;LF$:NW% = 1:RN = PP%
855 PRINT RD$;RF$;",R";RN
860 RD(NW%) = RN
865 INPUT RN: CALL 800:WD$(NW%) = MID$ (CV$,1)
870 IF RN THEN NW% = NW% +1: GOTO 855
875 PRINT CL$;RF$: RETURN
900 PRINT OP$;RO$;LO$
905 PRINT RD$;RO$;",R0"
910 INPUT RN
915 FOR X = 1 TO WS%
920 PRINT WR$;RO$;",R";X +RN
925 PRINT RD(X): NEXT
930 PRINT WR$;RO$;",R0"
935 PRINT RN +WS%
940 PRINT CL$;RO$: RETURN
950 PRINT OP$;RO$;LO$
955 PRINT RD$;RO$;",R0"
960 INPUT RN
965 FOR X = 1 TO N1%
970 PRINT WR$;RO$;",R";X +RN
975 PRINT RI(X): NEXT
980 PRINT WR$;RO$;",R0"
985 PRINT RN +N1%
990 PRINT CL$;RO$: RETURN
1000 TL$ = "ENTER RECIPES ": GOSUB 200
1010 PRINT : PRINT "WHAT IS NAME OF RECIPE ": PRINT :NC = 40: VTAB 8: HTAB 1: PRINT LEFT$(DT$,NC): HTAB 1: VTAB 8: GOSUB 150:NA$ = I$
1020 TL$ = NA$: GOSUB 200
1030 POKE 32,4: PRINT : FOR X = 1 TO NH: PRINT X;". ";HD$(X): NEXT : POKE 32,0: PRINT
1040 HTAB 1: VTAB NH +7: CALL CS:PM$ = "WHAT TYPE ":UL = NH: GOSUB 300:T = CH
1050 HOME : PRINT "HOW MANY SERVINGS? ";:NC = 2: GOSUB 150:NS% = VAL(I$)
1060 HOME : PRINT : PRINT "CATEGORY=";HD$(T): PRINT : PRINT "THIS WILL SERVE ";NS%
1070 PRINT : PRINT "IS THIS CORRECT? ";: GET I$: IF I$ < >"Y" THEN 1000
1080 T1$ = "INGREDIENTS": GOSUB 225
1090 NI% = 1:NC = 35
1100 PRINT "ENTER INGREDIENTS ('RETURN' TO QUIT)": PRINT
1110 PRINT NI%;") ";: HTAB 4: PRINT LEFT$(DT$,NC): CALL -998: HTAB 4: GOSUB 150: IF I$ = CHR$(13) GOTO 1140
1120 GOSUB 75: IF ND >3 THEN 1110
1130 IG$(NI%) = I$:NI% = NI% +1:VT = VT +2: GOTO 1110
1140 NI% = NI% -1: HOME : IF NI% = 0 THEN 1090
1150 FOR X = 1 TO NI%: PRINT X;") ";IG$(X): NEXT
1160 PRINT : PRINT "IS THIS CORRECT ";: GET I$: IF I$ = "Y" THEN 1210
1170 PRINT : PRINT : PRINT "WHICH INGREDIENT IS INCORRECT ":CV = PEEK(37):NC = 2: GOSUB 150:X = VAL(I$): IF X <1 OR X >NI% THEN VTAB CV -1: CALL -958: GOTO 1170
1180 HOME : PRINT "CHANGE:": PRINT : PRINT X;". ";IG$(X): PRINT : PRINT "TO: ": PRINT
1190 PRINT X;". ";:NC = 35: GOSUB 150: GOSUB 75: IF ND >3 THEN 1190
1200 IG$(X) = I$: HOME : GOTO 1150
1210 T1$ = "PREPARATION INSTRUCTIONS": GOSUB 225
1220 HT = 1:VT = 5: POKE 34,4: GOSUB 100
1230 HOME : FOR X = 1 TO NW%: PRINT WD$(X): NEXT
1240 VTAB 22: HTAB 1: PRINT "IF THIS IS CORRECT HIT 'RETURN'";: GET I$: IF I$ = CHR$(13) THEN GOTO 1260
1250 GOTO 1220
1260 PRINT :PN = 0: FOR X = 1 TO N: IF TR%(X) = 0 THEN PN = X
1270 NEXT : IF PN = 0 THEN N = N +1:PN = N
1280 NR$(PN) = NA$:TR%(PN) = T: HOME : PRINT : PRINT "WRITING TO DISK": POKE 34,0
1290 GOSUB 600: GOSUB 650: GOSUB 450
1300 GOSUB 500
1310 GOTO 30
2000 TL$ = "CHANGE AN ENTRY": GOSUB 200
2005 IF N <1 THEN GOSUB 410: GOTO 30
2010 IF I$ = CHR$(27) THEN 30
2015 VTAB 6: PRINT "WHAT PAGE NO. DO YOU WISH TO CHANGE? ";:NC = 3: GOSUB 150
2020 PN = VAL(I$): IF PN = 0 GOTO 30
2025 IF PN >N THEN GOSUB 420: GOTO 2015
2030 IF PN = 0 THEN GOTO 30
2035 GOSUB 700:TL$ = "CHANGE":T1$ = NR$(PN): GOSUB 225
2040 PRINT : PRINT " DO YOU WISH TO CHANGE": POKE 32,4: PRINT : PRINT "1. NAME OF RECIPE": PRINT "2. NUMBER OF SERVINGS": PRINT "3. CATEGORY"
2045 PRINT "4. INGREDIENTS": PRINT "5. PREPARATION INSTRUCTIONS"
2050 PRINT "6. DELETE RECIPE": PRINT : POKE 32,0
2055 PM$ = "WHICH: ":UL = 6: GOSUB 300:C1 = CH
2060 ON C1 GOTO 2100,2200,2300,2400,2800,2900
2100 HOME : PRINT "CHANGE NAME FROM: ": PRINT : PRINT " ";NR$(PN)
2110 PRINT : PRINT "TO: ": PRINT : PRINT " ";:NC = 40: GOSUB 150:NR$(PN) = I$
2120 HOME : PRINT "NAME: ";NR$(PN): PRINT "SERVES ";NS%: PRINT "CATEGORY=";HD$(TR%(PN))
2130 PRINT : PRINT : PRINT "IS THIS CORRECT? ";: GET I$: IF I$ = "N" THEN GOTO 2060
2140 PRINT : GOSUB 450: GOTO 30
2200 HOME : PRINT "CHANGE NUMBER OF SERVINGS": PRINT : PRINT " FROM: ";NS%: PRINT
2210 PRINT " TO: ";:NC = 2: GOSUB 150:NS% = VAL(I$): GOTO 2120
2300 HOME : PRINT : FOR X = 1 TO NH: PRINT X;") ";HD$(X): NEXT : PRINT
2310 PRINT "CHANGE HEADING FROM NO. ";TR%(PN): PRINT : PRINT " TO: ";:UL = NH: GOSUB 305:TR%(PN) = CH
2320 GOTO 2120
2400 HOME : PRINT "DO YOU WISH TO ": PRINT " 1. CHANGE AN INGREDIENT": PRINT " 2. ADD AN INGREDIENT"
2410 PRINT :PM$ = "WHICH? ":UL = 2: GOSUB 300: GOSUB 800:N1% = NI%: IF CH = 2 THEN 2590
2420 C = 0
2430 HOME : FOR X = 1 TO NI%: PRINT X;". ";IG$(X):C = C +1: IF C >16 THEN GOSUB 355
2440 NEXT
2450 PRINT : PRINT "CHANGE WHICH INGREDIENT? ";:NC = 2: GOSUB 150:X = VAL(I$)
2460 IF X <1 OR X >NI% THEN 2450
2470 HOME : PRINT "CHANGE INGREDIENT ";X;" FROM: ": PRINT : PRINT IG$(X)
2480 PRINT "TO: ": PRINT :NC = 35: GOSUB 150: GOSUB 75: IF ND >3 THEN 2480
2490 IG$(X) = I$
2500 C = 0: HOME : FOR X = 1 TO NI%: PRINT X;") ";IG$(X):C = C +1: IF C >15 THEN GOSUB 355
2510 NEXT
2520 VTAB 22: PRINT "IS THIS CORRECT? ";: GET I$: PRINT : IF I$ < >"Y" THEN 2430
2530 PRINT OP$;RF$;LF$:RI(NI% +1) = 0
2540 FOR X = 1 TO NI%
2550 PRINT WR$;RF$;",R";RI(X)
2560 PRINT RI(X +1)
2570 PRINT IG$(X): NEXT
2580 PRINT CL$;RF$: GOTO 30
2590 HOME : PRINT "LAST INGREDIENT WAS:"
2600 PRINT NI%;") ";IG$(NI%): PRINT
2610 NI% = NI% +1
2620 PRINT NI%;") ";:NC = 35: GOSUB 150: GOSUB 75: IF ND >3 THEN 2620
2630 IF I$ = CHR$(13) THEN 2650
2640 IG$(NI%) = I$: GOTO 2610
2650 NI% = NI% -1:C = 0: HOME
2660 FOR X = 1 TO NI%: PRINT X;") ";IG$(X):C = C +1: IF C >15 THEN GOSUB 355
2670 NEXT
2680 VTAB 22: PRINT "IS THIS CORRECT? ";: GET I$: PRINT : IF I$ < >"Y" THEN NI% = N1%: GOTO 2590
2690 GOSUB 950: GOSUB 600: GOSUB 450
2700 GOSUB 500: GOTO 30
2800 GOSUB 850
2810 TL$ = "REENTER PREPARATION INSTRUCTIONS"
2820 T1$ = NR$(PN): GOSUB 225
2830 HT = 1:VT = 5: GOSUB 100
2840 HOME : FOR X = 1 TO NW%: PRINT WD$(X): NEXT
2850 VTAB 22: HTAB 1: PRINT "IF THIS IS CORRECT HIT 'RETURN' ";: GET I$: PRINT : IF I$ < > CHR$(13) THEN GOTO 2800
2860 GOSUB 900: GOSUB 650: GOSUB 450
2870 GOSUB 500
2880 GOTO 30
2900 HOME : PRINT : PRINT "ARE YOU SURE YOU WANT TO DELETE :": PRINT
2910 PRINT NR$(PN);"....?";: GET I$
2920 PRINT I$: IF I$ < >"Y" THEN GOTO 2000
2930 GOSUB 800: GOSUB 850:N1% = NI%:WS% = NW%
2940 GOSUB 900: GOSUB 950
2950 NR$(PN) = "DELETED":NS% = 0:TR%(PN) = 0
2960 GOSUB 450: GOTO 30
3000 TL$ = "INDEX": GOSUB 200
3010 IF N <1 THEN GOSUB 410: GOTO 30
3020 PRINT : PRINT "INDEX SELECTIONS": POKE 32,5: PRINT
3030 PRINT "1= LIST ALL RECIPES BY PAGE NUMBER": PRINT "2= LIST RECIPES BY CATEGORY"
3040 PRINT "3= RETURN TO MAIN MENU": POKE 32,0: PRINT : PRINT
3050 PM$ = "INDEX CHOICE: ":UL = 3: GOSUB 300:C1 = CH
3060 IF CH = 3 THEN 30
3070 ON C1 GOTO 3100,3400
3080 TL$ = "INDEX": GOSUB 200
3100 GOSUB 375: GOSUB 325: GOSUB 200:C = 0
3110 FOR PN = 1 TO N: IF TR%(PN) = 0 THEN 3190
3120 PRINT PN;" "; SPC( PN <10); SPC( PN <100); SPC( PN <1000);NR$(PN)
3130 IF PR >0 THEN 3190
3140 C = C +1: IF C <16 THEN 3190
3150 VTAB 22: PRINT "ENTER PAGE NUMBER DESIRED"
3160 VTAB 23: PRINT "OR HIT 'RETURN' FOR MORE: ";:NC = 3: GOSUB 150
3170 IF I$ < > CHR$(13) THEN PN = VAL(I$): GOTO 3220
3180 C = 0: HOME : PRINT
3190 NEXT
3200 IF PR >0 THEN 30
3210 PRINT : PRINT "PAGE NUMBER DESIRED: ";:NC = 3: GOSUB 150
3220 GOSUB 4500
3230 GOTO 30
3400 TL$ = "CATEGORY INDEX": GOSUB 200:C = 0
3410 POKE 32,4: PRINT : FOR X = 1 TO NH: PRINT X;". ";HD$(X): NEXT : POKE 32,0: PRINT
3420 HTAB 1: VTAB NH +7: CALL CS:PM$ = "WHICH HEADING: ":UL = NH: GOSUB 300:T = CH
3430 GOSUB 375: GOSUB 325
3440 TL$ = HD$(T): GOSUB 200
3450 FOR PN = 1 TO N: IF TR%(PN) < >T THEN GOTO 3520
3460 PRINT PN;" "; SPC( PN <10); SPC( PN <100); SPC( PN <1000);NR$(PN): IF PR >0 THEN 3520
3470 C = C +1: IF C <16 THEN 3520
3480 VTAB 22: PRINT "ENTER PAGE NUMBER DESIRED"
3490 VTAB 23: PRINT "OR HIT 'RETURN' FOR MORE: ";:NC = 3: GOSUB 150
3500 IF I$ < > CHR$(13) THEN PN = VAL(I$): GOTO 3560
3510 C = 0: HOME : PRINT
3520 NEXT
3530 IF PR >0 THEN 30
3540 IF C = 0 THEN PRINT "THERE ARE NO RECIPES IN THIS CATEGORY": GOSUB 350: GOTO 30
3550 PRINT : PRINT "PAGE NUMBER DESIRED: ";:NC = 3: GOSUB 150
3560 GOSUB 4500
3570 GOTO 30
4000 HOME :TL$ = "PRINT RECIPES": GOSUB 200
4010 IF N <1 THEN GOSUB 410: GOTO 30
4020 PRINT "WHAT PAGE NUMBER? ";:NC = 3: GOSUB 150
4030 GOSUB 4500
4040 GOTO 30
4500 PN = VAL(I$): IF PN = 0 GOTO 30
4510 IF PN >N THEN GOSUB 420: GOTO 30
4520 FOR X = 1 TO 16:WD$(X) = "": NEXT
4530 IF TR%(PN) = 0 THEN GOSUB 420: POP : GOTO 30
4540 HOME : PRINT "DO YOU WANT: ": POKE 32,4: PRINT : PRINT "1. RECIPE SIZE AS LISTED"
4550 PRINT "2. RECIPE DOUBLED": PRINT "3. RECIPE TRIPLED": PRINT "4. RECIPE CUT IN HALF": PRINT :UL = 4:PM$ = "WHICH? "
4560 GOSUB 300:RS = CH: PRINT : POKE 32,0
4570 GOSUB 375: GOSUB 325
4580 GOSUB 700: GOSUB 800: GOSUB 850:C = 0
4590 IF RS = 1 THEN GOTO 4610
4600 GOSUB 6000
4610 IF PR >0 THEN NR$(PN) = CHR$(31) + CHR$(1) +NR$(PN) + CHR$(2) + CHR$(29)
4620 TL$ = NR$(PN):T1$ = "SERVES " + STR$(NS%): GOSUB 225
4630 FOR X = 1 TO NI%: PRINT X;") "; SPC( X <10);IG$(X): IF PR >0 THEN 4650
4640 C = C +1: IF C >14 THEN GOSUB 355
4650 NEXT
4660 IF PR >0 THEN GOTO 4690
4670 IF C >11 THEN GOSUB 355: GOTO 4700
4680 PRINT :C = C +1: GOTO 4700
4690 PRINT :TL$ = "PREPARATION INSTRUCTIONS": GOSUB 200
4700 IF PR = 0 THEN PRINT TAB( 8);"PREPARATION INSTRUCTIONS": PRINT :C = C +2
4710 IF PR >0 THEN 4760
4720 FOR X = 1 TO NW%: PRINT WD$(X)
4730 C = C +1: IF C >14 THEN GOSUB 355
4740 NEXT
4750 GOSUB 350: RETURN
4760 FOR X = 1 TO NW% STEP 2: PRINT WD$(X);" ";WD$(X +1): NEXT
4770 IF PR >0 THEN PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT D$;"PR#0":PR = 0: RETURN
5000 HOME : VTAB 11: HTAB 10: SPEED= 100
5010 CALL BL: PRINT "JAN LOVES NOREEN": CALL BL: SPEED= 255: CALL BL: END
6000 IF RS >3 THEN NS% = NS%/2: GOTO 6020
6010 NS% = NS% *RS
6020 IF NS% <1 THEN NS% = 1
6030 FOR X = 1 TO NI%
6040 NN% = 1
6050 C$(1) = LEFT$(IG$(X),1)
6060 IF ASC(C$(1)) <49 OR ASC(C$(1)) >57 THEN 6250: REM 1ST CHARACTER WAS NOT A NUMBER
6070 NN% = NN% +1
6080 C$(NN%) = MID$ (IG$(X),NN%,1)
6090 IF C$(NN%) = CHR$(32) THEN NN% = NN% -1: GOTO 6120
6100 NN% = NN% +1
6110 GOTO 6080
6120 IF NN% = 1 THEN DE% = 1:NU% = VAL(C$(1)): GOTO 6230
6130 IF NN% = 2 THEN DE% = 1:NU% = VAL(C$(1) +C$(2)): GOTO 6230
6140 IF NN% = 3 AND C$(2) = "/" THEN DE% = VAL(C$(3)):NU% = VAL(C$(1)): GOTO 6230
6145 IF NN% = 3 AND C$(2) < >"-" THEN DE% = 1:NU% = VAL(C$(1) +C$(2) +C$(3)): GOTO 6230
6150 IF NN% >3 THEN 6180
6160 DE% = 1:NU% = VAL(C$(1)): GOSUB 6500
6170 T1$ = NM$:DE% = 1:NU% = VAL(C$(3)): GOSUB 6500:NM$ = T1$ +"-" +NM$: GOTO 6240
6180 WN$ = "": FOR Y = 1 TO NN%: IF C$(Y) = "-" THEN DH = Y
6190 NEXT
6200 IF DH >NN% THEN 6250
6210 FOR W = 1 TO DH -1:WN$ = WN$ +C$(W): NEXT
6220 DE% = VAL(C$(DH +3)):NU% = VAL(C$(DH +1)) + VAL(WN$) *DE%
6230 GOSUB 6500
6240 IG$(X) = NM$ + RIGHT$(IG$(X), LEN(IG$(X)) -NN%)
6250 NEXT
6260 RETURN
6500 WN% = 0:TF$ = ""
6510 IF RS = 4 THEN DE% = DE% *2: GOTO 6530
6520 NU% = NU% *RS
6530 IF DE% < = NU% THEN WN% = INT(NU%/DE%):NU% = NU% -WN% *DE%
6540 IF NU% = 0 THEN NM$ = STR$(WN%): GOTO 6590
6550 TF$ = STR$(NU%) +"/" + STR$(DE%): FOR Y = 1 TO 13: IF TF$ = RE$(Y) THEN TF$ = FA$(Y)
6560 NEXT
6570 IF WN% = 0 THEN NM$ = TF$: GOTO 6590
6580 NM$ = STR$(WN%) +"-" +TF$
6590 RETURN
7000 ET = PEEK(222):LN = PEEK(218) + PEEK(219) *256: POKE 216,0
7010 IF ET = 0 OR ET >15 THEN 7180: REM APPLESOFT ERROR
7020 IF ET < >6 THEN 7120
7030 PRINT : PRINT OP$;IX$;L$
7040 PRINT WR$;IX$;",R0"
7050 PRINT N: PRINT NX%
7060 PRINT CL$;IX$
7070 PRINT OP$;RO$;LO$
7080 PRINT WR$;RO$;",R0"
7090 PRINT 0
7100 PRINT CL$;RO$
7110 TR%(1) = 1: GOTO 9290
7120 IF ET < >9 THEN 7180
7130 CALL BL: CALL BL
7140 TEXT : HOME : VTAB 8: PRINT "THERE IS NO MORE ROOM ON THIS DISK!!"
7150 PRINT : PRINT "INITIALIZE A NEW DISK AND CONTINUE"
7160 PRINT "ADDING RECIPES"
7170 END
7180 TEXT : HOME : VTAB 8: PRINT "ERROR NUMBER ";ET;" IN LINE ";LN
7190 IF ET = 0 OR ET >15 THEN PRINT "SEE APPLESOFT MANUAL, PAGE 81": GOTO 7210
7200 PRINT "SEE DOS MANUAL, PAGE 115"
7210 END
9000 HOME : VTAB 8: HTAB 13: PRINT "RECIPE BOX": PRINT : HTAB 11: PRINT "JL COSTENBADER": VTAB 23: PRINT "** COPYRIGHT 1982 BY MICROSPARC, INC **"
9010 DIM WD$(16),TR%(300),NR$(300),IG$(25),HD$(10),J$(80)
9020 DIM RD(16),RI(25),L%(23),LS(16)
9030 DIM C$(15),FA$(15),RE$(15)
9040 CS = -958:BL = -1054
9050 D$ = CHR$(4):CL$ = D$ +"CLOSE":OP$ = D$ +"OPEN"
9060 IX$ = "INDEX.FILE.L60":RD$ = D$ +"READ":RF$ = "RECIPE.FILE"
9070 RO$ = "OPEN.RECORDS":LO$ = ",L5"
9080 WR$ = D$ +"WRITE"
9090 LF$ = ",L45":L$ = ",L60"
9100 N = 0:PP% = 1:PI% = 1:NH = 9:NX% = 1
9110 DT$ = "................................................"
9120 ONERR GOTO 7000
9130 DATA APPETIZERS/PICKLES/RELISH,SOUPS/SALADS/SAUCES/DRESSINGS,MAIN DISHES (MEAT/FISH/POULTRY),MAIN DISHES (DAIRY/CASSEROLES)
9140 DATA VEGETABLES,BREAD/ROLLS/PIES/COOKIES,DESSERTS,JELLY/JAM/PRESERVES,BEVERAGES
9150 FOR X = 1 TO NH: READ HD$(X): NEXT
9160 DATA 162,0,32,117,253,160,2,138,145,105,200,169,0,145,105,200,169,2,145,105,189,0,2,41,127,157,0,2,202,224,255,208,243,96
9170 FOR J = 800 TO 833: READ I: POKE J,I: NEXT
9180 DATA 2/8,4/8,6/8,2/4,2/6,4/6,2/16,4/16,6/16,8/16,10/16,12/16,14/16
9190 DATA 1/4,1/2,3/4,1/2,1/3,2/3,1/8,1/4,3/8,1/2,5/8,3/4,7/8
9200 FOR X = 1 TO 13: READ RE$(X): NEXT
9210 FOR X = 1 TO 13: READ FA$(X): NEXT
9220 PRINT D$;"RENAME";IX$;",";IX$: PRINT
9230 PRINT OP$;IX$;L$
9240 PRINT RD$;IX$;",R0"
9250 INPUT N: INPUT NX%
9260 IF N = 0 THEN GOTO 9280
9270 FOR X = 1 TO N: PRINT RD$;IX$;",R";X: INPUT TR%(X): CALL 800:NR$(X) = MID$ (CV$,1): NEXT
9280 PRINT CL$;IX$
9290 X = PEEK(37): REM SET ADDRESSES FOR SCREEN LINES
9300 FOR I = 0 TO 23: POKE 37,I: CALL -990
9310 L%(I) = 256 *( PEEK(41)) + PEEK(40): NEXT
9320 POKE 37,X: CALL -990: GOTO 30